`:top
In `F33f`_`[coding theory`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Coding_theory]`_`f, `!decoding`! is the process of translating received messages into `F33f`_`[codewords`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Code_word_(communication)]`_`f of a given `F33f`_`[code`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Code]`_`f. There have been many common methods of mapping messages to codewords. These are often used to recover messages sent over a `F33f`_`[noisy channel`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Noisy_channel]`_`f, such as a `F33f`_`[binary symmetric channel`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Binary_symmetric_channel]`_`f.
>>Contents
• `F0af`_`[Notation`#notation]`_`f
• `F0af`_`[Ideal observer decoding`#ideal-observer-decoding]`_`f
• `F0af`_`[Decoding conventions`#decoding-conventions]`_`f
• `F0af`_`[Maximum likelihood decoding`#maximum-likelihood-decoding]`_`f
• `F0af`_`[Minimum distance decoding`#minimum-distance-decoding]`_`f
• `F0af`_`[Syndrome decoding`#syndrome-decoding]`_`f
• `F0af`_`[List decoding`#list-decoding]`_`f
• `F0af`_`[Information set decoding`#information-set-decoding]`_`f
• `F0af`_`[Partial response maximum likelihood`#partial-response-maximum-likelihood]`_`f
• `F0af`_`[Viterbi decoder`#viterbi-decoder]`_`f
• `F0af`_`[Optimal decision decoding algorithm (ODDA)`#optimal-decision-decoding-algorithm-odda]`_`f
• `F0af`_`[See also`#see-also]`_`f
• `F0af`_`[References`#references]`_`f
• `F0af`_`[Further reading`#further-reading]`_`f
-─
>>Notation
C ⊂ ⊂ F 2 n {\\displaystyle C\\subset \\mathbb {F} _{2}^{n}} is considered a `F33f`_`[binary code`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Binary_code]`_`f with the length n {\\displaystyle n} ; x , y {\\displaystyle x,y} shall be elements of F 2 n {\\displaystyle \\mathbb {F} _{2}^{n}} ; and d ( x , y ) {\\displaystyle d(x,y)} is the distance between those elements.
>>Ideal observer decoding
One may be given the message x ∈ ∈ F 2 n {\\displaystyle x\\in \\mathbb {F} _{2}^{n}} , then `!ideal observer decoding`! generates the codeword y ∈ ∈ C {\\displaystyle y\\in C} . The process results in this solution:
P ( y sent ∣ ∣ x received ) {\\displaystyle \\mathbb {P} (y{\\mbox{ sent}}\\mid x{\\mbox{ received}})}
For example, a person can choose the codeword y {\\displaystyle y} that is most likely to be received as the message x {\\displaystyle x} after transmission.
>>>Decoding conventions
Each codeword does not have an expected possibility: there may be more than one codeword with an equal likelihood of mutating into the received message. In such a case, the sender and receiver(s) must agree ahead of time on a decoding convention. Popular conventions include:
Request that the codeword be resent – `F33f`_`[automatic repeat-request`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Automatic_repeat-request]`_`f. Choose any random codeword from the set of most likely codewords which is nearer to that. If `F33f`_`[another code follows`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Concatenated_error_correction_code]`_`f, mark the ambiguous bits of the codeword as erasures and hope that the outer code disambiguates them Report a decoding failure to the system
>>Maximum likelihood decoding
Given a received vector x ∈ ∈ F 2 n {\\displaystyle x\\in \\mathbb {F} _{2}^{n}} `!`F33f`_`[maximum likelihood`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Maximum_likelihood]`_`f decoding`! picks a codeword y ∈ ∈ C {\\displaystyle y\\in C} that `F33f`_`[maximizes`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Optimization_(mathematics)]`_`f
P ( x received ∣ ∣ y sent ) {\\displaystyle \\mathbb {P} (x{\\mbox{ received}}\\mid y{\\mbox{ sent}})} ,
that is, the codeword y {\\displaystyle y} that maximizes the probability that x {\\displaystyle x} was received, `F33f`_`[given that`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Conditional_probability]`_`f y {\\displaystyle y} was sent. If all codewords are equally likely to be sent then this scheme is equivalent to ideal observer decoding. In fact, by `F33f`_`[Bayes' theorem`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Bayes'_theorem]`_`f,
P ( x received ∣ ∣ y sent ) = P ( x received , y sent ) P ( y sent ) = P ( y sent ∣ ∣ x received ) ⋅ ⋅ P ( x received ) P ( y sent ) . {\\displaystyle {\\begin{aligned}\\mathbb {P} (x{\\mbox{ received}}\\mid y{\\mbox{ sent}})&{}={\\frac {\\mathbb {P} (x{\\mbox{ received}},y{\\mbox{ sent}})}{\\mathbb {P} (y{\\mbox{ sent}})}}\\\\&{}=\\mathbb {P} (y{\\mbox{ sent}}\\mid x{\\mbox{ received}})\\cdot {\\frac {\\mathbb {P} (x{\\mbox{ received}})}{\\mathbb {P} (y{\\mbox{ sent}})}}.\\end{aligned}}}
Upon fixing P ( x received ) {\\displaystyle \\mathbb {P} (x{\\mbox{ received}})} , x {\\displaystyle x} is restructured and P ( y sent ) {\\displaystyle \\mathbb {P} (y{\\mbox{ sent}})} is constant as all codewords are equally likely to be sent. Therefore, P ( x received ∣ ∣ y sent ) {\\displaystyle \\mathbb {P} (x{\\mbox{ received}}\\mid y{\\mbox{ sent}})} is maximised as a function of the variable y {\\displaystyle y} precisely when P ( y sent ∣ ∣ x received ) {\\displaystyle \\mathbb {P} (y{\\mbox{ sent}}\\mid x{\\mbox{ received}})} is maximised, and the claim follows.
As with ideal observer decoding, a convention must be agreed to for non-unique decoding.
The maximum likelihood decoding problem can also be modeled as an `F33f`_`[integer programming`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Integer_programming]`_`f problem.`:cite-ref-feldman-2005-1-0[`F5bf`_`[1`#cite-note-feldman-2005-1]`_`f]
The maximum likelihood decoding algorithm is an instance of the "marginalize a product function" problem which is solved by applying the `F33f`_`[generalized distributive law`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Generalized_distributive_law]`_`f.`:cite-ref-aji-mceliece-2000-2-0[`F5bf`_`[2`#cite-note-aji-mceliece-2000-2]`_`f]
>>Minimum distance decoding
Given a received codeword x ∈ ∈ F 2 n {\\displaystyle x\\in \\mathbb {F} _{2}^{n}} , `!minimum distance decoding`! picks a codeword y ∈ ∈ C {\\displaystyle y\\in C} to minimise the `F33f`_`[Hamming distance`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Hamming_distance]`_`f:
d ( x , y ) = # # { i : x i ≠ y i } {\\displaystyle d(x,y)=\\#\\{i:x_{i}\\not =y_{i}\\}}
i.e. choose the codeword y {\\displaystyle y} that is as close as possible to x {\\displaystyle x} .
Note that if the probability of error on a discrete memoryless channel p {\\displaystyle p} is strictly less than one half, then `*minimum distance decoding`* is equivalent to `*maximum likelihood decoding`*, since if
d ( x , y ) = d , {\\displaystyle d(x,y)=d,\\,}
then:
P ( y received ∣ ∣ x sent ) = ( 1 − − p ) n − − d ⋅ ⋅ p d = ( 1 − − p ) n ⋅ ⋅ ( p 1 − − p ) d {\\displaystyle {\\begin{aligned}\\mathbb {P} (y{\\mbox{ received}}\\mid x{\\mbox{ sent}})&{}=(1-p)^{n-d}\\cdot p^{d}\\\\&{}=(1-p)^{n}\\cdot \\left({\\frac {p}{1-p}}\\right)^{d}\\\\\\end{aligned}}}
which (since `*p`* is less than one half) is maximised by minimising `*d`*.
Minimum distance decoding is also known as `*nearest neighbour decoding`*. It can be assisted or automated by using a `F33f`_`[standard array`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Standard_array]`_`f. Minimum distance decoding is a reasonable decoding method when the following conditions are met:
The probability p {\\displaystyle p} that an error occurs is independent of the position of the symbol. Errors are independent events – an error at one position in the message does not affect other positions.
These assumptions may be reasonable for transmissions over a `F33f`_`[binary symmetric channel`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Binary_symmetric_channel]`_`f. They may be unreasonable for other media, such as a DVD, where a single scratch on the disk can cause an error in many neighbouring symbols or codewords.
As with other decoding methods, a convention must be agreed to for non-unique decoding.
>>Syndrome decoding
`!Syndrome decoding`! is a highly efficient method of decoding a `F33f`_`[linear code`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Linear_code]`_`f over a `*noisy channel`*, i.e. one on which errors are made. In essence, syndrome decoding is `*minimum distance decoding`* using a reduced lookup table. This is allowed by the linearity of the code.`:cite-ref-beutelspacher-rosenbaum-1998-3-0[`F5bf`_`[3`#cite-note-beutelspacher-rosenbaum-1998-3]`_`f]
Suppose that C ⊂ ⊂ F 2 n {\\displaystyle C\\subset \\mathbb {F} _{2}^{n}} is a linear code of length n {\\displaystyle n} and minimum distance d {\\displaystyle d} with `F33f`_`[parity-check matrix`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Parity-check_matrix]`_`f H {\\displaystyle H} . Then clearly C {\\displaystyle C} is capable of correcting up to
t = ⌊ d − − 1 2 ⌋ {\\displaystyle t=\\left\\lfloor {\\frac {d-1}{2}}\\right\\rfloor }
errors made by the channel (since if no more than t {\\displaystyle t} errors are made then minimum distance decoding will still correctly decode the incorrectly transmitted codeword).
Now suppose that a codeword x ∈ ∈ F 2 n {\\displaystyle x\\in \\mathbb {F} _{2}^{n}} is sent over the channel and the error pattern e ∈ ∈ F 2 n {\\displaystyle e\\in \\mathbb {F} _{2}^{n}} occurs. Then z = x + e {\\displaystyle z=x+e} is received. Ordinary minimum distance decoding would lookup the vector z {\\displaystyle z} in a table of size | C | {\\displaystyle |C|} for the nearest match - i.e. an element (not necessarily unique) c ∈ ∈ C {\\displaystyle c\\in C} with
d ( c , z ) ≤ ≤ d ( y , z ) {\\displaystyle d(c,z)\\leq d(y,z)}
for all y ∈ ∈ C {\\displaystyle y\\in C} . Syndrome decoding takes advantage of the property of the parity matrix that:
H x = 0 {\\displaystyle Hx=0}
for all x ∈ ∈ C {\\displaystyle x\\in C} . The `*syndrome`* of the received z = x + e {\\displaystyle z=x+e} is defined to be:
H z = H ( x + e ) = H x + H e = 0 + H e = H e {\\displaystyle Hz=H(x+e)=Hx+He=0+He=He}
To perform `F33f`_`[ML decoding`#maximum-likelihood-decoding]`_`f in a `F33f`_`[binary symmetric channel`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Binary_symmetric_channel]`_`f, one has to look-up a precomputed table of size 2 n − − k {\\displaystyle 2^{n-k}} , mapping H e {\\displaystyle He} to e {\\displaystyle e} .
Note that this is already of significantly less complexity than that of a `F33f`_`[standard array decoding`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Standard_array]`_`f.
However, under the assumption that no more than t {\\displaystyle t} errors were made during transmission, the receiver can look up the value H e {\\displaystyle He} in a further reduced table of size
∑ ∑ i = 0 t ( n i ) {\\displaystyle {\\begin{matrix}\\sum _{i=0}^{t}{\\binom {n}{i}}\\\\\\end{matrix}}}
>>List decoding
>>Information set decoding
This is a family of `F33f`_`[Las Vegas`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Las_Vegas_algorithm]`_`f-probabilistic methods all based on the observation that it is easier to guess enough error-free positions, than it is to guess all the error-positions.
The simplest form is due to Prange: Let G {\\displaystyle G} be the k × × n {\\displaystyle k\\times n} generator matrix of C {\\displaystyle C} used for encoding. Select k {\\displaystyle k} columns of G {\\displaystyle G} at random, and denote by G ′ {\\displaystyle G'} the corresponding submatrix of G {\\displaystyle G} . With reasonable probability G ′ {\\displaystyle G'} will have full rank, which means that if we let c ′ {\\displaystyle c'} be the sub-vector for the corresponding positions of any codeword c = m G {\\displaystyle c=mG} of C {\\displaystyle C} for a message m {\\displaystyle m} , we can recover m {\\displaystyle m} as m = c ′ G ′ − − 1 {\\displaystyle m=c'G'^{-1}} . Hence, if we were lucky that these k {\\displaystyle k} positions of the received word y {\\displaystyle y} contained no errors, and hence equalled the positions of the sent codeword, then we may decode.
If t {\\displaystyle t} errors occurred, the probability of such a fortunate selection of columns is given by ( n − − t k ) / ( n k ) ≈ ≈ exp ( − − t k / n ) {\\displaystyle \\textstyle {\\binom {n-t}{k}}/{\\binom {n}{k}}\\approx \\exp(-tk/n)} .
This method has been improved in various ways, e.g. by Stern`:cite-ref-stern-1989-4-0[`F5bf`_`[4`#cite-note-stern-1989-4]`_`f] and `F33f`_`[Canteaut`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Anne_Canteaut]`_`f and Sendrier.`:cite-ref-ohta-1998-5-0[`F5bf`_`[5`#cite-note-ohta-1998-5]`_`f]
>>Partial response maximum likelihood
Partial response maximum likelihood (`F33f`_`[PRML`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=PRML]`_`f) is a method for converting the weak analog signal from the head of a magnetic disk or tape drive into a digital signal.
>>Viterbi decoder
A Viterbi decoder uses the Viterbi algorithm for decoding a bitstream that has been encoded using `F33f`_`[forward error correction`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Forward_error_correction]`_`f based on a convolutional code. The `F33f`_`[Hamming distance`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Hamming_distance]`_`f is used as a metric for hard decision Viterbi decoders. The `*squared`* `F33f`_`[Euclidean distance`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Euclidean_distance]`_`f is used as a metric for soft decision decoders.
>>Optimal decision decoding algorithm (ODDA)
Optimal decision decoding algorithm (ODDA) for an asymmetric TWRC system.`:cite-ref-6[`F5bf`_`[6`#cite-note-6]`_`f]
>>See also
• `F33f`_`[Don't care alarm`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Don't_care_alarm]`_`f
• `F33f`_`[Error detection and correction`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Error_detection_and_correction]`_`f
• `F33f`_`[Forbidden input`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Forbidden_input]`_`f
>>References
`:cite-note-feldman-2005-1`!1.`! `F0af`_`[↑`#cite-ref-feldman-2005-1-0]`_`f `:citereffeldmanwainwrightkarger2005`aFeldman, Jon; Wainwright, Martin J.; Karger, David R. (March 2005). "Using Linear Programming to Decode Binary Linear Codes". `*`F33f`_`[IEEE Transactions on Information Theory`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=IEEE_Transactions_on_Information_Theory]`_`f`*. `!51`! (3): 954–972. `F33f`_`[CiteSeerX`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=CiteSeerX_(identifier)]`_`f 10.1.1.111.6585. `F33f`_`[doi`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Doi_(identifier)]`_`f:10.1109/TIT.2004.842696. `F33f`_`[S2CID`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=S2CID_(identifier)]`_`f 3120399.
`:cite-note-aji-mceliece-2000-2`!2.`! `F0af`_`[↑`#cite-ref-aji-mceliece-2000-2-0]`_`f `:citerefajimceliece2000`aAji, Srinivas M.; McEliece, Robert J. (March 2000). "The Generalized Distributive Law" (PDF). `*`F33f`_`[IEEE Transactions on Information Theory`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=IEEE_Transactions_on_Information_Theory]`_`f`*. `!46`! (2): 325–343. `F33f`_`[doi`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Doi_(identifier)]`_`f:10.1109/18.825794.
`:cite-note-beutelspacher-rosenbaum-1998-3`!3.`! `F0af`_`[↑`#cite-ref-beutelspacher-rosenbaum-1998-3-0]`_`f `:citerefbeutelspacherrosenbaum1998`a`F33f`_`[Beutelspacher, Albrecht`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Albrecht_Beutelspacher]`_`f; Rosenbaum, Ute (1998). `*Projective Geometry`*. `F33f`_`[Cambridge University Press`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Cambridge_University_Press]`_`f. p. 190. `F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISBN_(identifier)]`_`f 0-521-48277-1.
`:cite-note-stern-1989-4`!4.`! `F0af`_`[↑`#cite-ref-stern-1989-4-0]`_`f `:citerefstern1989`aStern, Jacques (1989). "A method for finding codewords of small weight". `*Coding Theory and Applications`*. Lecture Notes in Computer Science. Vol. 388. `F33f`_`[Springer-Verlag`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Springer-Verlag]`_`f. pp. 106–113. `F33f`_`[doi`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Doi_(identifier)]`_`f:10.1007/BFb0019850. `F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISBN_(identifier)]`_`f 978-3-540-51643-9.
`:cite-note-ohta-1998-5`!5.`! `F0af`_`[↑`#cite-ref-ohta-1998-5-0]`_`f `:citerefohtapei1998`aOhta, Kazuo; Pei, Dingyi, eds. (1998). `*Advances in Cryptology — ASIACRYPT'98`*. Lecture Notes in Computer Science. Vol. 1514. pp. 187–199. `F33f`_`[doi`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Doi_(identifier)]`_`f:10.1007/3-540-49649-1. `F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISBN_(identifier)]`_`f 978-3-540-65109-3. `F33f`_`[S2CID`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=S2CID_(identifier)]`_`f 37257901.
`:cite-note-6`!6.`! `F0af`_`[↑`#cite-ref-6]`_`f `:citerefsiamack-ghadimi2020`aSiamack Ghadimi (2020), `*Optimal decision decoding algorithm (ODDA) for an asymmetric TWRC system;`*, Universal Journal of Electrical and Electronic Engineering
>>Further reading
• `:citerefhill1986`aHill, Raymond (1986). `*A first course in coding theory`*. Oxford Applied Mathematics and Computing Science Series. `F33f`_`[Oxford University Press`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Oxford_University_Press]`_`f. `F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISBN_(identifier)]`_`f 978-0-19-853803-5.
• `:citerefpless1982`a`F33f`_`[Pless, Vera`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Vera_Pless]`_`f (1982). `F33f`_`[Introduction to the theory of error-correcting codes`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Introduction_to_the_Theory_of_Error-Correcting_Codes]`_`f. Wiley-Interscience Series in Discrete Mathematics. `F33f`_`[John Wiley & Sons`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=John_Wiley_&_Sons]`_`f. `F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISBN_(identifier)]`_`f 978-0-471-08684-0.
• `:citerefvan-lint1992`avan Lint, Jacobus H. (1992). `*Introduction to Coding Theory`*. `F33f`_`[Graduate Texts in Mathematics`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Graduate_Texts_in_Mathematics]`_`f (GTM). Vol. 86 (2 ed.). `F33f`_`[Springer-Verlag`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Springer-Verlag]`_`f. `F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISBN_(identifier)]`_`f 978-3-540-54894-2.
`c`F0af`_`[↑ Back to top`#top]`_`f`a